package com.deyuanyun.pic.settings.domain.util;


import com.deyuanyun.pic.common.util.CommonUtil;
import com.deyuanyun.pic.common.util.StringUtils;
import com.deyuanyun.pic.settings.controller.dto.UserSessionVO;
import com.deyuanyun.pic.settings.support.cache.SessionCacheSupport;

import java.util.Date;

/**
 * 本类主要为自动装配domain中的固有的字段而出现。
 * 好处是如果在Service层中创建domain对象，不需要将createUser、updateUser也作为参数
 * 
 * 本类并不能完全通用，目前需要依赖在web项目中。
 * 本类是为了适应数据库每个表都有一部分固定字段而出现的产物。
 * 如果未来将domain中的固有字段抽出去单独为了一个Class，那么此类就不需要反射来做了，可以漂亮很多。
 * 
 *
 * @date 2016-03-31
 * @author ChenKui
 *
 */
public class DomainInitUtil{


	/**
	 * 初始化domain其中的createDate、createUser、id(UUID)
	 * @param domainObj
	 * @return
	 */
	public static void initCreateDomain(Object domainObj){
		initCreateDomain(domainObj,null);
	}
	
	
	/**
	 *  初始化domain其中的createDate、createUser、createRemark、id(UUID)
	 *   目前应该没有使用到createRemark，所以private了。
	 * @param domainObj
	 * @param remark
	 * @return
	 */
	public static void initCreateDomain(Object domainObj,String remark){
	    
		UserSessionVO sessionVO= SessionCacheSupport.getSessionVO();
		String userid;
		//TODO 待定：这个地方这个判断按理说是不需要的，但是客户端可能没有登录就要写数据。
		if(sessionVO == null){
		    userid = null;
		}else{
		    userid = sessionVO.getId();
		}
		DomainFieldReflectUtil.setFieldValue(domainObj, "id", CommonUtil.getUUID());
		DomainFieldReflectUtil.setFieldValue(domainObj, "createDate", new Date());
		DomainFieldReflectUtil.setFieldValue(domainObj, "createUser", userid);
		if(StringUtils.isNotEmpty(remark)){
			DomainFieldReflectUtil.setFieldValue(domainObj, "createRemark", remark);
		}
		
	}
	
	
	
	/**
	 * 初始化domain其中的updateDate、updateUser
	 * @param domainObj
	 * @return
	 */
	public static void initUpdateDomain(Object domainObj){
		initUpdateDomain(domainObj,null);
	}
	
	
	/**
	 * 初始化domain其中的updateDate、updateUser、updateRemark
	 * @param domainObj
	 * @param remark
	 */
	public static void initUpdateDomain(Object domainObj,String remark){
		
	    UserSessionVO sessionVO= SessionCacheSupport.getSessionVO();
	    String userid;
        //TODO 待定：这个地方这个判断按理说是不需要的，但是客户端可能没有登录就要写数据。
        if(sessionVO == null){
            userid = null;
        }else{
            userid = sessionVO.getId();
        }
		DomainFieldReflectUtil.setFieldValue(domainObj, "updateDate", new Date());
		DomainFieldReflectUtil.setFieldValue(domainObj, "updateUser", userid);
		if(StringUtils.isNotEmpty(remark)){
			DomainFieldReflectUtil.setFieldValue(domainObj, "updateRemark", remark);
		}
		
	}
	
	
	
}
